package com.biz.solr.aspectj;


import com.biz.solr.annotation.SolrSearchUpdate;
import com.biz.solr.biz.conifg.BIZConfig;
import com.biz.solr.exceptions.BizSolrNotFoundBizConifgException;
import com.biz.solr.utils.BizSolrUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

/**
 * @ClasName SearchUpdateAspectj
 * @Descripution TODO 在方法正常执行后 执行Solr更新
 * @Author USER
 * @Date 2022/3/24 8:41
 * @Version V1.0
 */
@Aspect
@Component
public class SearchUpdateAspectj {

    @Autowired
    BizSolrUtils solrUtils;

    /**
     * 切入点为注解的： @annotation(SolrSearchUpdate)
     * 存在 SolrSearchUpdate 注解的方法
     */
    @Pointcut("@annotation(com.biz.solr.annotation.SolrSearchUpdate)")
    private void updatePointCut() {
    }

    /**
     * 在方法正常执行通过之后执行的通知叫
     * @param joinPoint
     */
    @AfterReturning("updatePointCut()")
    public void doAfterReturning(JoinPoint joinPoint) {
        Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
        SolrSearchUpdate solrSearchUpdate = method.getAnnotation(SolrSearchUpdate.class);
        String bizType = solrSearchUpdate.bizType(); //根据不同的核心去更新对应的
        //更新自己与对应的业务
        BIZConfig searchBizByCore = BIZConfig.getSearchBizByBiz(bizType);
        if(searchBizByCore == null){
            throw new BizSolrNotFoundBizConifgException("找不到对应业务的配置");
        }
        solrUtils.solrUpdateByCore(searchBizByCore);

    }

}

